﻿using System;
using System.Collections.Generic;
using DevMaker.SIC.Dao.Business;
using DevMaker.SIC.Model;
using log4net;


namespace WebApplication1 {
    public partial class NuevoTurno : BasePage {
        readonly UsuarioBussiness _usuarioBussiness = new UsuarioBussiness();
        readonly ProductoBussiness _productoBussiness = new ProductoBussiness();
        readonly PuntoVentaBussiness _puntoVentasBussiness = new PuntoVentaBussiness();
        private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);


        public override string TemplateName {
            get { return "NuevoTurno"; }
        }

        protected void Page_Load(object sender, EventArgs e) {
            var mostrarpaso1 = false;
            var mostrarpaso2 = false;
            var mostrarpaso3 = false;

            if (Request.Form["mostrarPaso"] == null || Request.Form["mostrarPaso"] == "1")
                mostrarpaso1 = true;

            if (Request.Form["mostrarPaso"] == "2")
                mostrarpaso2 = true;

            if (Request.Form["mostrarPaso"] == "3")
                mostrarpaso3 = true;

            var txtBuscar = Request.Form["txtbuscar"];
            List<Usuario> cajeros;

            cajeros = _usuarioBussiness.ObtieneCajerosSinTurnoActivo();
            if (txtBuscar != null)
                cajeros = _usuarioBussiness.Buscar(cajeros, txtBuscar);

            var puntosVentas = _puntoVentasBussiness.ObtieneActivosSinTurnos();
            var productos = _productoBussiness.ObtieneActivos();
            AttributesTemplate.Add("Cajeros", cajeros);
            AttributesTemplate.Add("PuntosVentas", puntosVentas);

            AttributesTemplate.Add("mostrarPaso1", mostrarpaso1);
            AttributesTemplate.Add("mostrarPaso2", mostrarpaso2);
            AttributesTemplate.Add("mostrarPaso3", mostrarpaso3);

            AttributesTemplate.Add("txtbuscar", Request.Form["txtbuscar"]);
            if (Request.Form["idCajero"] != "") {
                var cajero = _usuarioBussiness.ObtieneCajeroPorId(Convert.ToInt32(Request.Form["idCajero"]));
                AttributesTemplate.Add("cajero", cajero);
            }
            if (!String.IsNullOrEmpty(Request.Form["idPuntoVenta"])) {
                var puntoVenta = _puntoVentasBussiness.ObtienePorId((Request.Form["idPuntoVenta"]));
                var productosUltimasCantidades = _productoBussiness.ObtieneUltimasCantidades(puntoVenta);
                foreach (var p in productos) {
                    p.CantidadPropuesta = Convert.ToInt64(productosUltimasCantidades[p.Id.ToString()]);
                }

                AttributesTemplate.Add("Productos", productos);
                AttributesTemplate.Add("puntoVenta", puntoVenta);
            }

            if (mostrarpaso3) {
                try {
                    var t = CrearTurno();
                    if (t != null)
                        AttributesTemplate.Add("mostrarExito", true);
                } catch (Exception ex) {
                    AttributesTemplate.Add("mostrarError", true);
                    AttributesTemplate.Add("error", ex.Message);
                }
            }
        }

        private Turno CrearTurno() {
            try {
                var cajero = _usuarioBussiness.ObtieneCajeroPorId(Convert.ToInt32(Request.Form["idCajero"]));
                var turno = new Turno {
                    Cajero = cajero,
                    FechaInicio = DateTime.Now,
                    EstadoTurno = EstadoTurno.Abierto,
                    Sucursal = Session["sucursal"] as Sucursal,
                    SupervisorApertura = Session["usuarioConectado"] as Usuario,
                    PuntoVenta = _puntoVentasBussiness.ObtienePorId(Request.Form["idPuntoVenta"])
                };

                var reposicion = new DevMaker.SIC.Model.Reposicion {
                    Fecha = DateTime.Now,
                    Supervisor = turno.SupervisorApertura,
                    Detalle = new List<ReposicionDetalle>(),
                    EsInicio = true
                };
                turno.Reposiciones.Add(reposicion);
                var productos = _productoBussiness.ObtieneTodos();
                foreach (var p in productos) {
                    var rd = new ReposicionDetalle { Producto = p, Cantidad = Convert.ToInt64(Request.Form["cantidad_" + p.Id]) };
                    turno.Reposiciones[0].Detalle.Add(rd);
                }
                var turnoBussiness = new TurnoBussiness();
                return turnoBussiness.Crear(turno);
            } catch (Exception ex) {
                Log.Error(ex);
                throw;
            }
        }
    }
}